{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-06-16T14:19:44.333355Z",
     "start_time": "2025-06-16T14:19:43.112936Z"
    }
   },
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "import pandas as pd\n",
    "import numpy as np"
   ],
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-16T14:19:45.783102Z",
     "start_time": "2025-06-16T14:19:45.761745Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# data = pd.DataFrame(\n",
    "#     {\n",
    "#         \"x\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11],\n",
    "#         \"y\": [7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27],\n",
    "#     }\n",
    "# )\n",
    "# data.to_csv('data/generate_data.csv',index=False)\n",
    "data = pd.read_csv(\"data/generate_data.csv\")\n",
    "data.head()"
   ],
   "id": "2e14133522ecbbf8",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   x   y\n",
       "0  1   7\n",
       "1  2   9\n",
       "2  3  11\n",
       "3  4  13\n",
       "4  5  15"
      ],
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:39.013147Z",
     "start_time": "2025-06-15T11:50:39.005732Z"
    }
   },
   "cell_type": "code",
   "source": [
    "x = data.loc[:, \"x\"]\n",
    "y = data.loc[:, \"y\"]\n",
    "print(x,y)"
   ],
   "id": "495b3101bbce2da5",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0     1\n",
      "1     2\n",
      "2     3\n",
      "3     4\n",
      "4     5\n",
      "5     6\n",
      "6     7\n",
      "7     8\n",
      "8     9\n",
      "9    10\n",
      "Name: x, dtype: int64 0     7\n",
      "1     9\n",
      "2    11\n",
      "3    13\n",
      "4    15\n",
      "5    17\n",
      "6    19\n",
      "7    21\n",
      "8    23\n",
      "9    25\n",
      "Name: y, dtype: int64\n"
     ]
    }
   ],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.117700Z",
     "start_time": "2025-06-15T11:50:39.284374Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from matplotlib import pyplot as plt\n",
    "plt.figure(figsize=(5,5))\n",
    "plt.scatter(x,y)"
   ],
   "id": "809bcc721cb9a4e8",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x16da4fa2810>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.157954Z",
     "start_time": "2025-06-15T11:50:40.149313Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.linear_model import LinearRegression\n",
    "lr_model = LinearRegression()\n",
    "print(x,y)"
   ],
   "id": "a40fc9babcb1027d",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0     1\n",
      "1     2\n",
      "2     3\n",
      "3     4\n",
      "4     5\n",
      "5     6\n",
      "6     7\n",
      "7     8\n",
      "8     9\n",
      "9    10\n",
      "Name: x, dtype: int64 0     7\n",
      "1     9\n",
      "2    11\n",
      "3    13\n",
      "4    15\n",
      "5    17\n",
      "6    19\n",
      "7    21\n",
      "8    23\n",
      "9    25\n",
      "Name: y, dtype: int64\n"
     ]
    }
   ],
   "execution_count": 5
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.228041Z",
     "start_time": "2025-06-15T11:50:40.222086Z"
    }
   },
   "cell_type": "code",
   "source": "print(type(x),type(y))",
   "id": "1755308216b9ce6f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.series.Series'> <class 'pandas.core.series.Series'>\n"
     ]
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.299064Z",
     "start_time": "2025-06-15T11:50:40.293634Z"
    }
   },
   "cell_type": "code",
   "source": [
    "x = np.array(x)\n",
    "# 补维度\n",
    "x = x.reshape(-1,1)\n",
    "y = np.array(y)\n",
    "y = y.reshape(-1,1)"
   ],
   "id": "c392df593d8f9098",
   "outputs": [],
   "execution_count": 7
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.338382Z",
     "start_time": "2025-06-15T11:50:40.332842Z"
    }
   },
   "cell_type": "code",
   "source": "print(type(x),type(y))\n",
   "id": "40fe7f23f9f8bea4",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'> <class 'numpy.ndarray'>\n"
     ]
    }
   ],
   "execution_count": 8
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.432498Z",
     "start_time": "2025-06-15T11:50:40.422586Z"
    }
   },
   "cell_type": "code",
   "source": "lr_model.fit(x,y)",
   "id": "a1f6529c3158b251",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression()"
      ],
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  display: none;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  overflow: visible;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".estimator-table summary {\n",
       "    padding: .5rem;\n",
       "    font-family: monospace;\n",
       "    cursor: pointer;\n",
       "}\n",
       "\n",
       ".estimator-table details[open] {\n",
       "    padding-left: 0.1rem;\n",
       "    padding-right: 0.1rem;\n",
       "    padding-bottom: 0.3rem;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table {\n",
       "    margin-left: auto !important;\n",
       "    margin-right: auto !important;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(odd) {\n",
       "    background-color: #fff;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(even) {\n",
       "    background-color: #f6f6f6;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:hover {\n",
       "    background-color: #e0e0e0;\n",
       "}\n",
       "\n",
       ".estimator-table table td {\n",
       "    border: 1px solid rgba(106, 105, 104, 0.232);\n",
       "}\n",
       "\n",
       ".user-set td {\n",
       "    color:rgb(255, 94, 0);\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       ".user-set td.value pre {\n",
       "    color:rgb(255, 94, 0) !important;\n",
       "    background-color: transparent !important;\n",
       "}\n",
       "\n",
       ".default td {\n",
       "    color: black;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       ".user-set td i,\n",
       ".default td i {\n",
       "    color: black;\n",
       "}\n",
       "\n",
       ".copy-paste-icon {\n",
       "    background-image: url();\n",
       "    background-repeat: no-repeat;\n",
       "    background-size: 14px 14px;\n",
       "    background-position: 0;\n",
       "    display: inline-block;\n",
       "    width: 14px;\n",
       "    height: 14px;\n",
       "    cursor: pointer;\n",
       "}\n",
       "</style><body><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.7/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"\">\n",
       "        <div class=\"estimator-table\">\n",
       "            <details>\n",
       "                <summary>Parameters</summary>\n",
       "                <table class=\"parameters-table\">\n",
       "                  <tbody>\n",
       "                    \n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('fit_intercept',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">fit_intercept&nbsp;</td>\n",
       "            <td class=\"value\">True</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('copy_X',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">copy_X&nbsp;</td>\n",
       "            <td class=\"value\">True</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('tol',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">tol&nbsp;</td>\n",
       "            <td class=\"value\">1e-06</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('n_jobs',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">n_jobs&nbsp;</td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('positive',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">positive&nbsp;</td>\n",
       "            <td class=\"value\">False</td>\n",
       "        </tr>\n",
       "    \n",
       "                  </tbody>\n",
       "                </table>\n",
       "            </details>\n",
       "        </div>\n",
       "    </div></div></div></div></div><script>function copyToClipboard(text, element) {\n",
       "    // Get the parameter prefix from the closest toggleable content\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",
       "\n",
       "    const originalStyle = element.style;\n",
       "    const computedStyle = window.getComputedStyle(element);\n",
       "    const originalWidth = computedStyle.width;\n",
       "    const originalHTML = element.innerHTML.replace('Copied!', '');\n",
       "\n",
       "    navigator.clipboard.writeText(fullParamName)\n",
       "        .then(() => {\n",
       "            element.style.width = originalWidth;\n",
       "            element.style.color = 'green';\n",
       "            element.innerHTML = \"Copied!\";\n",
       "\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        })\n",
       "        .catch(err => {\n",
       "            console.error('Failed to copy:', err);\n",
       "            element.style.color = 'red';\n",
       "            element.innerHTML = \"Failed!\";\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        });\n",
       "    return false;\n",
       "}\n",
       "\n",
       "document.querySelectorAll('.fa-regular.fa-copy').forEach(function(element) {\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const paramName = element.parentElement.nextElementSibling.textContent.trim();\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",
       "\n",
       "    element.setAttribute('title', fullParamName);\n",
       "});\n",
       "</script></body>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 9
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.567081Z",
     "start_time": "2025-06-15T11:50:40.560970Z"
    }
   },
   "cell_type": "code",
   "source": [
    "y_predict = lr_model.predict(x)\n",
    "print(y_predict)"
   ],
   "id": "9753a3dcc1e1489a",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 7.]\n",
      " [ 9.]\n",
      " [11.]\n",
      " [13.]\n",
      " [15.]\n",
      " [17.]\n",
      " [19.]\n",
      " [21.]\n",
      " [23.]\n",
      " [25.]]\n"
     ]
    }
   ],
   "execution_count": 10
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.652889Z",
     "start_time": "2025-06-15T11:50:40.646924Z"
    }
   },
   "cell_type": "code",
   "source": [
    "y_3 = lr_model.predict([[3.5]])\n",
    "print(y_3)"
   ],
   "id": "cf7ec5905c700e8d",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[12.]]\n"
     ]
    }
   ],
   "execution_count": 11
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.779680Z",
     "start_time": "2025-06-15T11:50:40.772001Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# y = 2x + 5\n",
    "a = lr_model.coef_\n",
    "b = lr_model.intercept_\n",
    "print(a,b)"
   ],
   "id": "5f52380eb258c34d",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[2.]] [5.]\n"
     ]
    }
   ],
   "execution_count": 12
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:40.867396Z",
     "start_time": "2025-06-15T11:50:40.859835Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from sklearn.metrics import mean_squared_error,r2_score\n",
    "MSE = mean_squared_error(y,y_predict)\n",
    "R2 = r2_score(y,y_predict)\n",
    "print(MSE,R2)"
   ],
   "id": "48a915d1f5f1fa25",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.1554436208840474e-31 1.0\n"
     ]
    }
   ],
   "execution_count": 13
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-06-15T11:50:41.100411Z",
     "start_time": "2025-06-15T11:50:40.932738Z"
    }
   },
   "cell_type": "code",
   "source": [
    "plt.figure(figsize=(5,5))\n",
    "plt.scatter(y,y_predict)\n",
    "plt.show()"
   ],
   "id": "a911a4025163b7b3",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ],
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 14
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
